package com.faxon.leetcode.a;

import org.junit.Test;

/**
 * @author Faxon
 * @version 1.0
 * @date 2020-04-11 18:58
 * 回文数
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 * <p>
 * 示例 1:
 * 输入: 121
 * 输出: true
 * <p>
 * 示例 2:
 * 输入: -121
 * 输出: false
 * 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
 * <p>
 * 示例 3:
 * 输入: 10
 * 输出: false
 * 解释: 从右向左读, 为 01 。因此它不是一个回文数。
 **/
public class LeetCode9 {
    /**
     * 方法1：借助字符串，进行反转
     *
     * @param x
     * @return
     */
    public boolean isPalindrome(int x) {
        String s = String.valueOf(x);
        for (int i = 0; i < s.length() / 2; i++) {
            if (s.charAt(i) != s.charAt(s.length() - i - 1)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 方法2：反转数字本身
     *
     * @param x
     * @return
     */
    public boolean isPalindrome2(int x) {
        if (x < 0) {
            return false;
        }
        int rev = 0, y = x;
        while (x != 0) {
            int temp = x % 10 + rev * 10;
            if ((temp - (x % 10)) / 10 != rev) {
                //越界
                return false;
            }
            rev = temp;
            x = x / 10;
        }
        return rev == y;
    }

    @Test
    public void test() {
        boolean palindrome = isPalindrome(1);
        System.out.println(palindrome);
        boolean palindrome2 = isPalindrome2(1);
        System.out.println(palindrome2);
    }
}
